"""
TODO JDBC操作
1、概述：java database connectivity，java数据库连接，是java访问数据库的标准规范，可以为不同的关系型数据库提供统一访问
       由一组用java语言编写的接口和类组成

2、执行流程 - 核心类和接口
        Driver Manager：            用于注册驱动
        Connection：                表示与数据库创建的连接
        Statement/PrepareStatement：操作数据库sql语句的对象
        ResultSets：                结果集或一张虚拟表

3、代码实现
 ① 准备工作：打开IDEA -> new(project) -> new(directory:lib) -> 驱动包jar复制粘贴到lib -> 选中lib下的jar -> 右键（add as lib...）
            -> new(package：cn.jdbc) -> 选中cn.jdbc -> new(java class:jdbcdemo01)
 ② 代码：
     package cn.jdbc;
     import java.sql.*;
     public class jdbcdemo01 {
         public static void main(string[] args) throws SQLException {

                      //111 用户输入用户名和密码，判断是否能登录
                      Scanner scanner = new Scanner(System.in);

                      System.out.println("请输入用户名：");
                      String username = Scanner.nextLine();

                      System.out.println("请输入密码：");
                      String password = Scanner.nextLine();

             //1、注册驱动
             DriverManager.registerDriver(new com.mysql.jdbc.Driver());
                 -- 优化：系统自动注册了，所以这一步可以省略

             //2、获取连接  （只需更改mydb2-sql中的一个数据库）
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb2","root","123456");

                       //222 连接
                       Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1","root","123456");


             //3、执行sql---------------------------------------------------------------------------------查询 【【【【【【
             Statement statement = connection.createStatement();
             ResultSet resultSet = statement.executeQuery("select * from student"); -- （student- sql里mydb2库里的一个表）
                       /// 333 执行
                       Statement statement = connection.createStatement();

                         -- 定义字符串sql，封装查询语句，这里的username和password是111中要输入的变量
                       String sql = "select * from user where username = '"+username+"' and password = '"+password+"'";
                       ResultSet resultSet = statement.executeQuery(sql);

                       if(resultSet.next()){
                           System.out.println("登录成功！");
                       }else{
                           System.out.println("登录失败！");
                       }
                       //注意：密码输入为aaa 'or' 1=1,显示登录成功，因为，此时的sql为 (username and aaa) or (1 = 1),1=1总是为真

                       --> 预处理：
                             String sql = "select * from user where username = ? and password = ?";
                             PreparedStatement preparedStatement = connection.preparedStatement(sql);

                             preparedStatement.setObject(1,username);
                             preparedStatement.setObject(2,password);

                             ResultSet resultSet = preparedStatement.executeQuery(); -- sql已经被预处理了，不需要输入
             //获取表的列数
             ResultSetMetaData metaData = resultSet.getMetaData();
             int columnCount = metaData.getColumnCount();

             //4、处理结果集
             while(resultSet.next()){//获取每一行数据
                  //获取每一列数据
                  for(i = 1; i <= columnCount; i++){
                      System.out.print(resultSet.getObject(i) + "\t"); --
                  }
                  System.out.println(); -- 换行
             }


                                        //获取每一列数据
                                        int id = resultSet.getInt("id");
                                        String name = resultSet.getString("name");
                                         String gender = resultSet.getString("gender");
                                         int chinese = resultSet.getInt("chinese");
                                         int english = resultSet.getInt("english");
                                         int math = resultSet.getInt("math");
                                         --优化：
                                            int id = resultSet.getInt(1);
                                           String name = resultSet.getString(2);
                                            String gender = resultSet.getString(3);
                                           int chinese = resultSet.getInt(4);
                                           int english = resultSet.getInt(5);
                                           int math = resultSet.getInt(6);

                                         //打印数据
                                        System.out.println(id + "\t" + name + "\t"+ gender
                                         + "\t"+ chinese + "\t" + english+ "\t"+ math);
             //5、关闭连接
             resultSet.close();
             statement.close();
             connection.close();
             --------------------------------------------------------------------------------------------------】】】】】】
             3、执行sql -- 增删改操作（其他内容和【【【【【.....】】】】】之前一致）
                 Statement statement = connection.createStatement();
                 -- 增
                 int rows1 = statement.executeUpdate("insert into student values(9,'周明','男',95,95,95)");
                 System.out.println(rows1);  -- 返回1（表示增加了一行，可以在sql里查看表数据）

                 -- 删
                 int rows2 = statement.executeUpdate("delete from student where name = '周明'");
                 System.out.println(rows2);  -- 返回1（表示删除了一行，可以在sql里查看表数据）

                 -- 改
                 int rows3 = statement.executeUpdate("update student set gender = '女' where name = '周明'");
                 System.out.println(rows3);  -- 返回1（表示修改了一行，可以在sql里查看表数据）

             4、关闭连接
                 statement.close();
                 connection.close();



         }
     }

6、SQL注入

TODO pymysql操作
1、查询操作
2、增删改操作


"""